﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PersonalAccounting.Business;

namespace PersonalAccounting.Forms
{
    public partial class FormIngresoMovimientos : Form
    {

        #region Attributes

        private Movimiento movimiento;
        private MovimientoFacade facade;

        #endregion

        #region Form

        public FormIngresoMovimientos()
        {
            movimiento = new Movimiento();
            facade = new MovimientoFacade();

            InitializeComponent();
        }

        private void FormIngresoMovimientos_Load(object sender, EventArgs e)
        {
            cboCuenta.CargarCuentas();
            dtpFecha.Value = DateTime.Today;
        }

        #endregion


        #region Click

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (DatosOk())
                Agregar();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        #endregion

        #region SelectedIndexChanged

        private void cboCuenta_SelectedIndexChanged(object sender, EventArgs e)
        {
            CargarTipos();
        }

        #endregion


        private bool DatosOk()
        {
            if (txtImporte.Value == 0)
            {
                MessageBox.Show("Debe indicar un importe diferente de cero.", this.Text,
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                txtImporte.Focus();
                return false;
            }

            string mensaje;
            
            if (radIngreso.Checked)
                mensaje = "¿Confirma ingreso?";
            else
                mensaje = "¿Confirma retiro?";

            DialogResult dr = MessageBox.Show(mensaje, this.Text, 
                MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            return (dr == DialogResult.Yes);
        }

        private void Agregar()
        {
            movimiento.Codigo = facade.GetNextCode();
            movimiento.Cuenta = cboCuenta.Value;
            movimiento.Fecha = dtpFecha.Value;
            movimiento.Tipo = cboTipo.Text;
            movimiento.Descripcion = txtDescripcion.Text;
            movimiento.Importe = txtImporte.Value;

            if (radRetiro.Checked)
                movimiento.Importe *= -1;

            facade.Insert(movimiento);

            LimpiarForm();
            dtpFecha.Focus();
        }

        private void LimpiarForm()
        {
            dtpFecha.Value = DateTime.Today;
            txtDescripcion.Clear();
            txtImporte.Clear();
            CargarTipos();
        }

        private void CargarTipos()
        {
            cboTipo.Items.Clear();
            foreach (string tipo in facade.GetListTipo(cboCuenta.Value))
            {
                cboTipo.Items.Add(tipo);
            }
        }

    }
}